package br.ufrn.sigtcc.controller.cadastros;


import java.util.List;
import java.util.logging.Logger;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.primefaces.event.FlowEvent;

import br.ufrn.sigtcc.controller.cadastros.interfaces.IControleCadastroAluno;
import br.ufrn.sigtcc.controller.services.AlunoServiceImpl;
import br.ufrn.sigtcc.model.entidades.Aluno;
import br.ufrn.sigtcc.model.entidades.Curso;
import br.ufrn.sigtcc.model.entidades.Endereco;
import br.ufrn.sigtcc.model.entidades.PropostaTCC;
import br.ufrn.sigtcc.model.entidades.PropostaTema;
import br.ufrn.sigtcc.model.entidades.Telefone;
import br.ufrn.sigtcc.util.exceptions.BDException;
import br.ufrn.sigtcc.util.exceptions.BusinessException;

@ManagedBean(name="alunoBean")
@SessionScoped
public class ControleCadastroAluno extends AlunoServiceImpl implements IControleCadastroAluno{
	
	
	public ControleCadastroAluno() {
		// TODO Auto-generated constructor stub
	}
	
	
	private Aluno aluno =  new Aluno();
	private Endereco endereco =  new Endereco();
	private Telefone telefone =  new Telefone();
	private ControleCadastroCurso curso =  new ControleCadastroCurso();
	


	public Aluno getAluno() {
		return aluno;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}

	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public Telefone getTelefone() {
		return telefone;
	}

	public void setTelefone(Telefone telefone) {
		this.telefone = telefone;
	}


	public ControleCadastroCurso getCurso() {
		return curso;
	}

	public void setCurso(ControleCadastroCurso curso) {
		this.curso = curso;
	}

	@Override
	public void cadastrarAluno() throws BDException, BusinessException {

		aluno.setEndereco(endereco);
		aluno.setTelefone(telefone);
		
		Curso c =  new Curso();
		Long cursoId = curso.getCurso().getId();
		c = curso.cursoById(cursoId);
		aluno.setCurso(c);
		
		super.cadastrarAluno(aluno);
		
		
	}

	@Override
	public void removerAluno() throws BDException, BusinessException {

		super.removerAluno(aluno);
		
	}

	@Override
	public void atualizarAluno() throws BDException, BusinessException {

		super.atualizarAluno(aluno);
		
	}

	@Override
	public List<Aluno> listarAlunos() throws BDException {
		// TODO Auto-generated method stub
		return super.listarAlunos();
	}

	@Override
	public List<PropostaTema> listarPropostasTemas() throws BDException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<PropostaTCC> listarPropostasTCCs() throws BDException {
		// TODO Auto-generated method stub
		return null;
	}
	
	private boolean skip;
	
	private static Logger logger = Logger.getLogger(ControleCadastroAluno.class.getName());

	public void cadastrarAluno(ActionEvent actionEvent) throws BDException, BusinessException {

		cadastrarAluno();
		
		FacesMessage msg = new FacesMessage("Sucesso", "Bem Vindo :" + aluno.getNome());
		FacesContext.getCurrentInstance().addMessage(null, msg);
	}
	
	public boolean isSkip() {
		return skip;
	}

	public void setSkip(boolean skip) {
		this.skip = skip;
	}
	
	public String onFlowProcess(FlowEvent event) {
		logger.info("Passo Corrente:" + event.getOldStep());
		logger.info("Proximo passo:" + event.getNewStep());
		
		if(skip) {
			skip = false;	
			return "confirm";
		}
		else {
			return event.getNewStep();
		}
	}

	
}
